#include "PanelJuego.h"
#include "Mutex.h"
#include "VistaButton.h"
#include "VistaFichaTablero.h"
#include <string> 
#include <iostream>
#include <map>

PanelJuego::PanelJuego(int ancho, int alto): label_puntuacion("Puntaje"),
											 label_nivel("Nivel"), 
											 label_usuario("Usuario"),
											 botonVolver("Volver") {
    dibujador = new VistaEscenario();
    dibujador->set_size_request(600, 600);
    put(*dibujador, 0, 0); //inserto area de dibujo

    botonVolver.set_size_request(100, 20);
    put(botonVolver, 650, 570);

	botonMute.add_pixlabel(RUTA_SOUND_ON, "");
	botonMute.set_size_request(48,48);
    put(botonMute, 650, 500);

    label_nivel.set_size_request(100, 20);
    put(label_nivel, 650, 20);

    label_score.set_size_request(100, 20);
    put(label_score, 650, 220);

    inicializarPanelScore();
}

void PanelJuego::establecerDatosNivel(std::string nombreNivel, 
                                      std::string nivel,
                                      std::string maxPuntaje, 
                                      int fil, int col) {
    label_nivel.set_text("Nivel: " + nombreNivel);

    label_score.set_text("Objetivo: " + maxPuntaje + " puntos");

    dibujador->establecerDimensiones(fil, col);

    show_all();
}

void PanelJuego::agregarFicha(VistaFichaTablero *vec) {
    dibujador->agregarFicha(vec);
}
void PanelJuego::vaciarPartidas() {
    dibujador->quitarFichas();
    limpiarPanelJugadores();
}

void PanelJuego::limpiarPanelJugadores() {
    m_refTreeModel->clear();
}

void PanelJuego::inicializarPanelScore() {
    m_refTreeModel = Gtk::ListStore::create(m_Columns);

    m_TreeView.set_model(m_refTreeModel);

    m_TreeView.append_column("Usuario", m_Columns.usuario);
    m_TreeView.append_column("Puntaje", m_Columns.puntaje);

    scrollScore.add(m_TreeView);

    scrollScore.set_size_request(198, 200);

    scrollScore.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);

    put(scrollScore, 610, 250); //inserto area de dibujo
}

void PanelJuego::agregarPanelScoreJug(std::map<std::string, Usuario *> jug) {
    std::map<std::string, Usuario *>::iterator it;

    for (it = jug.begin(); it != jug.end(); ++it) {
        Gtk::TreeModel::Row row = *(m_refTreeModel->append());

        row[m_Columns.usuario] = it->first;
        row[m_Columns.puntaje] = 0;
    }
}


void PanelJuego::actualizarPuntaje(std::map<std::string, Usuario *>
                                   hashJugadores) {
    Gtk::TreeModel::Children children = m_refTreeModel->children();
    Gtk::TreeModel::Row row;

    std::string nombre = "";
    Glib::ustring nombreU = "";

    for (Gtk::TreeModel::Children::iterator iter = children.begin();
            iter != children.end(); ++iter) {
        row = *iter;

        nombreU = row[m_Columns.usuario];
        nombre = nombreU;//paso de ustring a string sino, no compila

        row[m_Columns.puntaje] = hashJugadores[nombre]->puntaje;
    }
}

void PanelJuego::setImagenFondoTablero(std::string path) {
    dibujador->setImagenFondo(path);
}

PanelJuego::~PanelJuego() {
    delete dibujador;
}
